public class demo2 {
    int []dx=new int[]{0,0,1,-1};
    int []dy=new int[]{1,-1,0,0};
    boolean[][] ret;
    int m=0;
    int n=0;
    public int numIslands(char[][] grid) {
        m=grid.length;
        n=grid[0].length;
        int sum=0;
        ret=new boolean[m][n];
        for(int i=0;i<m;i++){
            for (int j = 0; j <n ; j++) {
                if(grid[i][j]=='1'&& !ret[i][j]){

                    sum++;
                    dfs(grid,i,j);
                    // ret[i][j]=false;
                }
            }
        }
        return sum;
    }
    public void dfs(char[][] grid,int x,int y){
        ret[x][y]=true;
        for(int i=0;i<4;i++){
            int a=x+dx[i];
            int b=y+dy[i];
            if(a>=0&&a<m&&b>=0&&b<n&&!ret[a][b]&&grid[a][b]=='1'){
                //  ret[a][b]=true;
                //grid[a][b]='.';
                dfs(grid,a,b);
                //  ret[a][b]=false;
            }
        }
    }
}
